package current;

import java.util.Vector;

/**
 * Created by dycong on 2017/4/29.
 */
public class LoggingWidget extends Widget{

    // TODO: 2017/4/29 同步实例方法的锁为 this 锁。锁是“重入”的。参考并发编程p21
    @Override
    public synchronized void doSomeThings(){
        super.doSomeThings();
        System.out.println("I'am in LoggingWidget...");
    }

    public static void main(String[] args) {
        LoggingWidget loggingWidget=new LoggingWidget();
        loggingWidget.doSomeThings();
    }
    public void testMultiLock(){
        Vector<Integer>vector=new Vector<>();
        // TODO: 2017/4/29  虽然Vector各个方法都有synchronized，但是并不能保证如下复合操作的原子性，单个操作的原子性并不能保证符合操作的原子性，需要额外的加锁机制，类似双重校验锁
        if (vector.contains(1)){
            vector.add(1);
        }
    }
}
